using System.Collections;

namespace NavigateExample.Services.Dialog
{
    // 对话框参数类，支持键值对形式的参数传递
    public class DialogParameters : IEnumerable<KeyValuePair<string, object>>
    {
        private readonly Dictionary<string, object> _parameters;
        public DialogParameters() =>  _parameters = new Dictionary<string, object>();
        public DialogParameters(Dictionary<string, object> parameters)
        {
            _parameters = parameters ?? new Dictionary<string, object>();
        }
        // 添加参数：参数键-参数值
        public void Add(string key, object value) =>_parameters[key] = value;
        // 获取参数值
        // object value;_parameters.TryGetValue(key, out value);
        public T? GetValue<T>(string key)
        {
            if (_parameters.TryGetValue(key, out var value) && value is T typedValue)
            {
                return typedValue;
            }
            return default(T);
        }
        // 获取参数值，如果不存在则返回默认值
        public T GetValue<T>(string key, T defaultValue)
        {
            if (_parameters.TryGetValue(key, out var value) && value is T typedValue)
            {
                return typedValue;
            }
            return defaultValue;
        }
        //检查是否包含指定键
        public bool ContainsKey(string key) => _parameters.ContainsKey(key);
        // 参数数量
        public int Count => _parameters.Count;
        // 索引器，支持通过键获取和设置值
        // 相当于为类创建了一个类似字典的访问接口
        public object? this[string key]
        {
            get => _parameters.TryGetValue(key, out var value) ? value : null;
            set => _parameters[key] = value!;
        }
        // 获取所有键
        public IEnumerable<string> Keys => _parameters.Keys;
        // 获取所有值
        public IEnumerable<object> Values => _parameters.Values;
        // 实现Enumerator<KeyValuePair<string, object>>接口
        public IEnumerator<KeyValuePair<string, object>> GetEnumerator()
        {
            return _parameters.GetEnumerator();
        }
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }
}